this._daemonProxy = null;
this._lastDeviceId = null;
+ if (Meta.is_wayland_compositor() &&
+ Caribou.DisplayAdapter.set_default)
+ Caribou.DisplayAdapter.set_default(new ShellWaylandAdapter());
+
Meta.get_backend().connect('last-device-changed', Lang.bind(this,
function (backend, deviceId) {
let manager = Clutter.DeviceManager.get_default();
this._keyboard.show(Main.layoutManager.bottomIndex);
}
});
+
+const ShellWaylandAdapter = new Lang.Class({
+ Name: 'ShellWaylandAdapter',
+ Extends: Caribou.XAdapter,
+
+ vfunc_keyval_press: function(keyval) {
+ let focus = global.stage.get_key_focus();
+ if (focus instanceof Clutter.Text)
+ Shell.util_text_insert_keyval(focus, keyval);
+ else
+ this.parent(keyval);
+ },
+
+ vfunc_keyval_release: function(keyval) {
+ let focus = global.stage.get_key_focus();
+ if (focus instanceof Clutter.Text)
+ return; // do nothing
+ else
+ this.parent(keyval);
+ },
+});
return FALSE;
}
+
+void
+shell_util_text_insert_keyval (ClutterActor *actor,
+ guint keyval)
+{
+ ClutterEvent event = { 0 };
+
+ event.type = CLUTTER_KEY_PRESS;
+ event.key.keyval = keyval;
+
+ clutter_actor_event (actor, &event, FALSE);
+}
gboolean shell_util_need_background_refresh (void);
+void shell_util_text_insert_keyval (ClutterActor *actor,
+ guint keyval);
+
G_END_DECLS
#endif /* __SHELL_UTIL_H__ */